#include <iostream>
#include <regex>
#include <string>
#include <unistd.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include <iomanip>
#include <string.h>

#include <stdint.h>

std::string str = "Get /login.html?user=xiaoming&pass=123123 HTTP/1.1";
std::string str1 = "Get /login.html?user=xiaoming&pass=123123 HTTP/1.1\r\n";
// ‘\0’表示字符串结束，它在ASCII中的值为0（数值0，非字符‘0’）
// 所以在数值上NULL,’\0’,0是一样的，都是0，但’0’就不同了，在ASCII码中编码为48，所以字符0和上述三个值不同。
std::string str2 = "Get /search/1234?user=xiaoming&pass=123123 HTTP/1.1\r\n";


int main()
{
    std::smatch marches;
    std::smatch marches2;

    std::regex e("(Get) /(search)/(\\d+)\\?(.*) (HTTP/1\\.[01])(?:\n|\r\n)");    //e里的是匹配格式，()里的是匹配格式并且获取
    std::regex e2("(Get) /(search)/([^?]*)\\?(.*) (HTTP/1\\.[01])(?:\n|\r\n)");    //e里的是匹配格式，()里的是匹配格式并且获取

    int ret = std::regex_match(str2,marches,e);
    int ret2 = std::regex_match(str2,marches2,e2);

    for(auto ch:marches)
    {
        std::cout<<ch.str()<<std::endl;
    }
    std::cout<<std::endl;
    for(auto ch:marches2)
    {
        std::cout<<ch.str()<<std::endl;
    }
    return 0;
}
